package com.itmk.web.user.controller;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;

import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.itmk.utils.ResultUtils;
import com.itmk.utils.ResultVo;
import com.itmk.web.user.entity.*;
import com.itmk.web.user.service.UserService;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.DigestUtils;
import org.springframework.web.bind.annotation.*;


@RestController
//该控制器的根路径为 /api/User，所有方法的路径都会基于此路径。
@RequestMapping("/api/User")
public class UserController {
    @Autowired
    private UserService userService;

    //用户基本信息注册
    @PostMapping("/register")
    public ResultVo register(@RequestBody User user) {
//       判断用户名是否存在
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.lambda().eq(User::getAccount, user.getAccount());
        User user1 = userService.getOne(queryWrapper);
        if (user1 != null) {
            return ResultUtils.error("Account already exists");
        }
//        密码加密
        user.setPassword(DigestUtils.md5DigestAsHex(user.getPassword().getBytes()));
//        将用户数据保存到数据库
        if (userService.save(user)) {
//            此时已完成用户基本信息注册，需进行实名认证

            // 构建注册响应对象，把userid返回给前端
            RegisterResponse registerResponse = new RegisterResponse();
            registerResponse.setUserId(user.getUserId());
            registerResponse.setAccount(user.getAccount());
            return ResultUtils.success("register success", registerResponse);
        }
        return ResultUtils.error("register error");
    }

    // 用户登录
    @PostMapping("/login")
    public ResultVo login(@RequestBody User user) {
        // 检查 user 对象是否为 null，确保请求中包含有效的账号和密码
        if (user == null || user.getAccount() == null || user.getPassword() == null) {
            return ResultUtils.error("账号或密码不能为空");
        }

        // 使用 QueryWrapper 进行查询
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.lambda()
                .eq(User::getAccount, user.getAccount())
                .eq(User::getPassword, DigestUtils.md5DigestAsHex(user.getPassword().getBytes()));
        // 查询数据库中的用户
        User user1 = userService.getOne(queryWrapper);

        // 如果用户不存在，返回错误信息
        if (user1 == null) {
            return ResultUtils.error("用户名或密码错误");
        }
        System.out.println("Login status: " + user1.getStatus());
        // 检查用户状态是否为禁用
        if (user1.getStatus().equals(2)) {
            return ResultUtils.error("当前账户已被禁用");
        }

        // 构建登录响应对象
        LoginResponse loginResponse = new LoginResponse();
        loginResponse.setUserId(user1.getUserId());
        loginResponse.setNickname(user1.getNickname());
        loginResponse.setAvatar(user1.getAvatar()); // 使用查询到的用户头像
        loginResponse.setStatus(user1.getStatus());

        // 返回成功信息和用户数据
        return ResultUtils.success("登录成功", loginResponse);
    }


    //    新增用户
    @PostMapping
    public ResultVo add(@RequestBody User user) {
        //        将用户数据保存到数据库
        if (userService.save(user)) {
            return ResultUtils.success("add success");
        } else {
            return ResultUtils.error("add error");
        }
    }

    //    查询用户列表
    @GetMapping("/getList")
    public ResultVo getList(UserParm userParm) {

        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        // 使用Lambda表达式设置查询条件，如果e不为空，则按进行模糊查询
        queryWrapper.lambda().like(StringUtils.isNotEmpty(userParm.getNickname()), User::getNickname, userParm.getNickname());
        IPage<User> page = new Page<>(userParm.getCurrentPage(), userParm.getPageSize());
        IPage<User> list = userService.page(page, queryWrapper);
        return ResultUtils.success("get list success", list);
    }

    // 重置用户密码
    @PutMapping("/resetPassword")
    public ResultVo resetPassword(@RequestBody User user) {
        // 检查用户是否存在
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.lambda().eq(User::getUserId, user.getUserId());
        User existingUser = userService.getOne(queryWrapper);
        if (existingUser == null) {
            return ResultUtils.error("用户不存在");
        }

        // 设置新密码（通常设置为默认密码，如123456，并提示用户登录后修改）
        String newPassword = "123456";
        existingUser.setPassword(DigestUtils.md5DigestAsHex(newPassword.getBytes()));
        if (userService.updateById(existingUser)) {
            return ResultUtils.success("密码重置成功，新密码为：" + newPassword);
        } else {
            return ResultUtils.error("密码重置失败");
        }
    }

    // 小程序修改用户密码
    @PostMapping("/changePassword")
    public ResultVo changePassword(@RequestBody ChangePasswordParm parm) {

        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.lambda().eq(User::getUserId, parm.getUserId())
                .eq(User::getPassword,DigestUtils.md5DigestAsHex(parm.getOldPassword().getBytes()));
        User user1 = userService.getOne(queryWrapper);
        if (user1==null){
            return ResultUtils.error("旧密码错误,请重新输入");
        }
        UpdateWrapper<User> updateWrapper=new UpdateWrapper<>();
        updateWrapper.lambda().set(User::getPassword,DigestUtils.md5DigestAsHex(parm.getNewPassword().getBytes()))
                .eq(User::getUserId,parm.getUserId());
        if(userService.update(updateWrapper)){
            return ResultUtils.success("新密码设置成功");
        }
        return ResultUtils.error("新密码设置失败");

    }


    //    编辑用户
    @PutMapping("/edit")
    public ResultVo edit(@RequestBody User user) {
        if (userService.updateById(user)) {
            return ResultUtils.success("edit success");
        } else {
            return ResultUtils.error("edit error");
        }
    }

    //    删除用户 ,通过id删除
    @DeleteMapping("/{userId}")
    public ResultVo del(@PathVariable("userId") int userId) {
        if (userService.removeById(userId)) {
            return ResultUtils.success("delete success");
        } else {
            return ResultUtils.error("delete error");
        }
    }

//    查询个人信息
    @GetMapping("/getUserInfo/{userId}")
    public ResultVo getUserInfo(@PathVariable Integer userId) {
        User user = userService.getById(userId);
        if(user != null) {
            // 可以创建一个专门的响应对象，只返回需要的字段
            LoginResponse response = new LoginResponse();
            response.setUserId(user.getUserId());
            response.setNickname(user.getNickname());
            response.setAvatar(user.getAvatar());
            response.setStatus(user.getStatus());
            response.setPhoneNum(user.getPhoneNum());
            response.setLevel(user.getLevel());
            response.setSex(user.getSex());
            // 可以添加信用等级等其他字段
            return ResultUtils.success("获取成功", response);
        }
        return ResultUtils.error("用户不存在");
    }
}